package com.demo.woziqi.entity;

import com.demo.woziqi.util.GameUtil;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author 宋明松
 * @Version V1.0.0
 * @Date 2022-05-23
 *
 * AI实体类，及相关落子方法
 */
public class AI {
    private static int zNum; // 左
    private static int yNum; // 右
    private static int sNum; // 上
    private static int xNum; // 下

    private static int zsNum; // 左上
    private static int zxNum; // 左下
    private static int ysNum; // 右上
    private static int yxNum; // 右下

    private static Map<String,Integer> aiMap = new HashMap<>();

    public static void setWeight(Chess chess) { // 获取权值

        // 向下找同色棋子
        for (int i = chess.getyIndex() + 1; i <= chess.getyIndex() + 4; i++) {
            if (GameUtil.isExit(chess.getxIndex(), i, chess.getColor())) {
                xNum++;
            } else {
                break;
            }
        }
        // 向上找同色棋子
        for (int i = chess.getyIndex() - 1; i >= chess.getyIndex() - 4; i--) {
            if (GameUtil.isExit(chess.getxIndex(), i, chess.getColor())) {
                sNum++;
            } else {
                break;
            }
        }
        // 向右找同色棋子
        for (int i = chess.getxIndex() + 1; i <= chess.getxIndex() + 4; i++) {
            if (GameUtil.isExit(i, chess.getyIndex(), chess.getColor())) {
                yNum++;
            } else {
                break;
            }
        }
        // 向左找同色棋子
        for (int i = chess.getxIndex() - 1; i >= chess.getxIndex() - 4; i--) {
            if (GameUtil.isExit(i, chess.getyIndex(), chess.getColor())) {
                zNum++;
            } else {
                break;
            }
        }
        // 向右上找同色棋子
        int j = chess.getyIndex();
        for (int i = chess.getxIndex() + 1; i <= chess.getxIndex() + 4; i++) {
            if (GameUtil.isExit(i, --j, chess.getColor())) {
                ysNum++;
            } else {
                break;
            }
        }
        // 向右下找同色棋子
        int j2 = chess.getyIndex();
        for (int i = chess.getxIndex() - 1; i >= chess.getxIndex() - 4; i--) {
            if (GameUtil.isExit(i, ++j2, chess.getColor())) {
                yxNum++;
            } else {
                break;
            }
        }
        // 向左上找同色棋子
        int j3 = chess.getyIndex();
        for (int i = chess.getxIndex() - 1; i >= chess.getxIndex() - 4; i--) {
            if (GameUtil.isExit(i, --j3, chess.getColor())) {
                zsNum++;
            } else {
                break;
            }
        }
        // 向左下找同色棋子
        int j4 = chess.getyIndex();
        for (int i = chess.getxIndex() + 1; i <= chess.getxIndex() + 4; i++) {
            if (GameUtil.isExit(i, ++j4, chess.getColor())) {
                zxNum++;
            } else {
                break;
            }
        }
        aiMap.put("左",zNum);
        aiMap.put("右",yNum);
        aiMap.put("上",sNum);
        aiMap.put("下",xNum);
        aiMap.put("左上",zsNum);
        aiMap.put("左下",zxNum);
        aiMap.put("右上",ysNum);
        aiMap.put("右下",yxNum);
        System.out.println("左：" + zNum + ",右：" + yNum + ",上：" + sNum + ",下：" + xNum + ",左上：" + zsNum + ",左下：" + zxNum + ",右上：" + ysNum + ",右下：" + yxNum);
        System.out.println(aiMap);
    }

    public static Map<String,Integer> getWeight() { //返回权值
        Map<String,Integer> max = new HashMap<>();
        max.put("左",aiMap.get("左"));

        for (String key : aiMap.keySet()) { //
            for (String keyM : max.keySet()) {
                if (aiMap.get(key)>max.get(keyM)) {
                    max.put(key,aiMap.get(key));
                }
            }

        }
        return max;
    }
}